<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 1. 定义一个30项的数组，数组的每一项要求都是6，每间隔5个数字，求出这五个数的平均值
    // - 数组有30个数据（长度是30），30个6
    // var arr = new Array(30);
    var arr = [];
    for(var i=0;i<30;i++){
        arr[i] = ( Math.round( Math.random() * (9-1) + 1 ) );
    }
    console.log(arr);
    // - 每连续5个数字（截取），求平均
    // 0~5
    // 5~10
    // 10~15
    // ...
    for(var i=0;i<arr.length;i+=5){
        // 每5个数据截取成一个小数组
        var a = arr.slice(i, i+5);
        console.log(a);
        // 求平均值并打印
        console.log(avg(a));
    }
    // 求平均值的封装函数
    function avg(a){
        var sum = 0;
        for(var i=0;i<a.length;i++){
            sum += a[i];
        }
        return sum / a.length;
    }


    console.log("===========");
    

    // 2. 通过循环制造一个5 x 5的二维数组，这个数组中的数据是hello，试编程
    //     - [[],[],[],[],[]]
    var bigArr = [];
    for(var i=0;i<5;i++){
        var sArr = [];
        for(var j=0;j<5;j++){
            sArr.push("hello")
        }
        bigArr.push(sArr);
    }
    console.log(bigArr);


    console.log("===========");
    
    
    // 3. 编写函数 map(arr)，要求把数组中的每一位数字都增加30%
    var arr = [3,4,5,6,7];
    console.log(arr);
    map(arr);
    console.log(arr);
    
    
    console.log("===========");



    // 4. 编写函数 has(arr, 60)，要求判断数组中是否存在60这个元素，返回布尔类型
    var arr = [3, 4, 5, 6, 7];
    console.log(has(arr, 5));
    console.log(has(arr, "5"));
    console.log(has(arr, 50));

    
    console.log("===========");


    // 5. 编写函数 norepeat(arr)，要求将数组的重复元素去掉，并返回新的数组
    var arr = [4,6,5,3,7,6,5,8,7,9,2,3,2,2,2];
    console.log(arr);
    console.log(norepeat(arr));
    
    
    console.log("===========");
    
    // 6. 有一个从小到大排好序的数组。现输入一个数，要求按原来的规律将它插入数组中
    var arr = [2,3,6,9,35];
    console.log(arr);
    insert(arr, 8)
    console.log(arr);




    // 第三题的功能
    function map(myarr){
        // 遍历
        for(var i=0;i<myarr.length;i++){
            // 改变
            myarr[i] = myarr[i] * 1.3;
        }
        // 返回
        return (myarr);
    }

    // 第四题的功能
    function has(myarr, data){
        // 遍历
        for(var i=0;i<myarr.length;i++){
            // 比较
            if(myarr[i] === data){
                // 相同了，返回true
                return true;
            }
        }
        // 必须所有数据都比较完，才能确实是否不存在相同
        // 所以在循环结束后，如果代码还在执行，说明没有找到相同的
        return false;
    }

    // 第五题的功能
    function norepeat(myarr){
        // 创建新数组
        var nArr = [];
        // 遍历老数组
        for(var i=0;i<myarr.length;i++){
            // 判断新数组中是否存在老数组的数据
            if(!has(nArr, myarr[i])){
                // 不存在，将这个数据存入新数组
                nArr.push(myarr[i])
            }
        }
        // 最后返回新数组
        return nArr;
    }


    // 第六题的功能
    function insert(myarr, data){
        // 先找到数据要插入的位置
        for(var i=0;i<myarr.length;i++){
            if(data < arr[i]){
                break;
            }
        }
        // 从数组最后一位向后移动，腾出要插入的数据的位置
        for(var j=myarr.length-1;j>=i;j--){
            myarr[j+1] = myarr[j];
        }
        // 将新数据插入指定位置
        myarr[i] = data;
        return myarr;
    }
</script>
</html>